package com.demo.java.OD251_300.OD276;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【机房布局】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146075516
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();

        System.out.println(solveMethod(line));
    }

    private static int solveMethod(String line) {
        int n = line.length(); // 获取输入字符串的长度
        Deque<int[]> stack = new LinkedList<>(); // 用栈来保存电源的范围
        boolean stick = false; // 标记电源是否已经绑定到当前柜子

        // 遍历每个字符
        for (int i = 0; i < n; i++) {
            if (line.charAt(i) == 'M') { // 遇到柜子'M'时
                boolean left = i - 1 < 0 || line.charAt(i - 1) == 'M'; // 判断左侧是否有电源
                boolean right = i + 1 >= n || line.charAt(i + 1) == 'M'; // 判断右侧是否有电源

                // 如果左侧和右侧都没有电源，返回-1
                if (left && right) {
                    return -1;
                }

                int[] range = {Math.max(0, i - 1), Math.min(n - 1, i + 1)}; // 确定电源覆盖的范围

                // 如果栈中有数据，且没有绑定电源，则进行电源的覆盖
                if (!stack.isEmpty() && !stick) {
                    int[] prev = stack.peekLast();
                    int end1 = prev[1];
                    int start2 = range[0];

                    // 如果前一个电源的结束位置与当前电源的开始位置相同，则可以绑定
                    if (end1 == start2) {
                        stack.pollLast(); // 移除上一个电源范围
                        stick = true; // 标记电源已经绑定
                    }
                } else {
                    stick = false; // 否则，标记电源没有绑定
                }
                stack.offerLast(range); // 添加当前电源的范围到栈中
            }
        }

        return stack.size(); // 返回电源的数量
    }
}